/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package basedatos;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import java.net.URL;
import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
import java.util.HashMap;

/**
 *
 * @author residentene
 */
public class Reportin {

    static Pool p = new Pool();
/**
 * Método que realiza el reporte de personal
 * @param url dirección del archivo Jasper
 * @param ruta ruta de entrega
 * @param d Dominio nombre
 * @param dom id dominio
 * @param year año
 * @param trim trimestre
 * @return Ruta a desplegar
 */
    public static String Reportepersonal(URL url, String ruta, String d, int dom, int year, int trim) {
        JasperReport reporte;
        String nopdf = "";
        try {
            nopdf = ruta + "/Participacion_" + d + "t" + trim + "a" + year + ".pdf";
            Map param = new HashMap();
            param.put("year", year);
            param.put("trim", trim);
            param.put("dom", dom);
            param.put("dominio", d);
           // param.put("total", totalparticipacion(dom, trim, year));
            //madre = Acciones.rutamadre(ruta);
            reporte = (JasperReport) JRLoader.loadObject(url);
            JasperPrint jasperPrint;
            jasperPrint = JasperFillManager.fillReport(reporte, param, p.extraerConexion());
            JRExporter exporter = new JRPdfExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new File(nopdf));
            exporter.exportReport();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return rutamadre(nopdf);
    }
/**
 * Método que despliega el reporte anual
 * @param url ruta del archivo Jasper
 * @param ruta ruta para el archivo
 * @param year año a elegir
 * @return Ruta del archivo a mostrar
 */
    public static String Reporteanual(URL url, String ruta, int year) {
        JasperReport reporte;
        String nopdf = "";
        try {
            nopdf = ruta + "/ReporteAnual" + year + ".pdf";
            Map param = new HashMap();
            param.put("year", year);

            //madre = Acciones.rutamadre(ruta);
            reporte = (JasperReport) JRLoader.loadObject(url);
            JasperPrint jasperPrint;
            jasperPrint = JasperFillManager.fillReport(reporte, param, p.extraerConexion());
            JRExporter exporter = new JRPdfExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new File(nopdf));
            exporter.exportReport();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return rutamadre(nopdf);
    }
/**
 * Método que realiza el reporte de participación por áreas
 * @param url ruta del archivo Jasper
 * @param ruta ruta del archivo a generar
 * @param d Nombre del dominio
 * @param dom id del dominio
 * @param year año 
 * @param trim trimestre
 * @return ruta a desplegar del archivo.
 */
    public static String ReportePastel(URL url, String ruta, String d, int dom, int year, int trim) {

        JasperReport reporte;
        String nopdf = "";
        try {
            nopdf = ruta + "/Participacion_" + d + "t" + trim + "a" + year + ".pdf";
            Map param = new HashMap();
            param.put("year", year);
            param.put("trim", trim);
            param.put("dominio", dom);
            param.put("dom", d);
            param.put("total", totalparticipacion(dom, trim, year));
            //madre = Acciones.rutamadre(ruta);
            reporte = (JasperReport) JRLoader.loadObject(url);
            JasperPrint jasperPrint;
            jasperPrint = JasperFillManager.fillReport(reporte, param, p.extraerConexion());
            JRExporter exporter = new JRPdfExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new File(nopdf));
            exporter.exportReport();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return rutamadre(nopdf);

    }
/**
 * Método que da el total de participación de un dominio por año teniendo como base los objetivos de dirección
 * @param dom id del dominio
 * @param trim trimestre
 * @param year año
 * @return numero total de participaciones
 */
    public static int totalparticipacion(int dom, int trim, int year) {
        int total = 0;
        String sql = "select count(a.idobjdir) as numero from objdir a,direccion b,tactica c where a.idtac=c.idtac and a.direccion=b.id and (a.estado='Terminado' or a.estado='No Terminado') and c.dominio=? and a.trimestre=? and a.aregistro=?";
        PreparedStatement pst = null;
        Connection conn = null;
        try {
            conn = p.extraerConexion();
            pst = conn.prepareStatement(sql);
            pst.setInt(1, dom);
            pst.setInt(2, trim);
            pst.setInt(3, year);
            ResultSet rs = pst.executeQuery();
            while (rs.next()) {
                total = rs.getInt(1);
            }
        } catch (SQLException ex) {
            System.out.println(ex);
        } finally {
            try {
                pst.close();
                p.liberarConexion(conn);
                //System.gc();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
        }
        return total;
    }
    /**
     * Método que recorta la ruta de los reportes para que sea visible en la interfaz
     * @param rutaempresa ruta absoluta del archivo
     * @return ruta relativa del archivo
     */
    public static String rutamadre(String rutaempresa)
  {
    String x = rutaempresa.replaceAll("//", "/");
    
    System.out.println("Ruta Madre: La ruta recibida y a tratar es " + x);
    String temp = "";
    int cont = 0;
    for (int i = x.length() - 1; i > 0; i--) {
      if (((x.charAt(i) == '\\') || (x.charAt(i) == '/')) && (cont <= 1))
      {
        temp = x.substring(i + 1, x.length());
        System.out.println("Ruta Madre: La cadena formada en la iteracion " + cont + " es actualmente " + temp);
        cont++;
      }
    }
    String dar = temp.replace('\\', '/');
    System.out.println("Ruta Madre: La cadena de retorno es " + dar);
    return dar;
  }

}
